COO Communities
The primary geographic unit of this assessment is the census tract. As is the case with many communities, the census geographies do not coincide exactly with the formal geographic boundary of the study’s three sites, and should be considered as spatial approximations of these communities.
Listed below are the geographic identifiers of the census tracts that approximate each site.
| 53033010000 |
53033010001 |
53033026900 |
53033026600 |
53033026100 |
53033026200 |
| 53033010300 |
53033010300 |
53033026500 |
53033026700 |
53033026200 |
53033027300 |
| 53033010400 |
53033010401 |
53033026600 |
53033026500 |
53033026300 |
53033028000 |
| 53033011000 |
53033011001 |
53033026700 |
53033026801 |
53033026400 |
53033028100 |
| 53033011101 |
53033011002 |
53033026801 |
53033026802 |
53033027100 |
53033028300 |
| 53033011102 |
53033011101 |
53033026802 |
53033027000 |
53033027200 |
53033028402 |
| 53033011700 |
53033011102 |
53033027000 |
NA |
53033027300 |
53033028403 |
| 53033011800 |
53033011700 |
NA |
NA |
53033028000 |
53033028500 |
| 53033011900 |
53033011800 |
NA |
NA |
53033028100 |
53033028700 |
| NA |
53033011900 |
NA |
NA |
53033028200 |
53033028801 |
| NA |
NA |
NA |
NA |
53033028300 |
53033028802 |
| NA |
NA |
NA |
NA |
53033028402 |
53033029101 |
| NA |
NA |
NA |
NA |
53033028403 |
53033026100 |
| NA |
NA |
NA |
NA |
53033028500 |
53033026200 |
| NA |
NA |
NA |
NA |
53033028700 |
53033026300 |
| NA |
NA |
NA |
NA |
53033028801 |
53033026400 |
| NA |
NA |
NA |
NA |
53033028802 |
53033027100 |
| NA |
NA |
NA |
NA |
53033029100 |
53033027200 |
| NA |
NA |
NA |
NA |
NA |
53033027300 |
| NA |
NA |
NA |
NA |
NA |
53033028100 |
| NA |
NA |
NA |
NA |
NA |
53033028200 |
| NA |
NA |
NA |
NA |
NA |
53033028300 |
| NA |
NA |
NA |
NA |
NA |
53033028802 |
To create the community approximations, the tract boundaries of each community are merged and each of the census table estimates are aggregated. In addition to combining the estimates, this method also recalculates the standard error for each census table. It should be noted that this method is only valid for census tables representing count data.
LS0tDQpkZl9wcmludDogdGliYmxlDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgZGVmYXVsdA0KICBwZGZfZG9jdW1lbnQ6DQogICAga2VlcF90ZXg6IHllcw0KYWx3YXlzX2FsbG93X2h0bWw6IHllcw0KLS0tDQoNCmBgYHtyIGNlbnN1cy1hY3MtY29tbXMtc2V0dXAsIGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLGNvbW1lbnQ9RkFMU0V9DQpsaWJyYXJ5KHBseXIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShycHJvanJvb3QpDQpsaWJyYXJ5KHJnZGFsKQ0KbGlicmFyeShzcCkNCmxpYnJhcnkocmdlb3MpDQpsaWJyYXJ5KHRpZ3JpcykNCmxpYnJhcnkobGVhZmxldCkNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeShzdHJpbmdyKQ0KbGlicmFyeShkb3dubG9hZGVyKQ0KbGlicmFyeSh3ZWJzaG90KQ0KbGlicmFyeShodG1sdG9vbHMpDQpsaWJyYXJ5KGdwbG90cykNCmxpYnJhcnkoZ2dtYXApDQpsaWJyYXJ5KHNoaW55KQ0KbGlicmFyeShodG1sd2lkZ2V0cykNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShhY3MpDQpsaWJyYXJ5KFJDb2xvckJyZXdlcikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShmb3JjYXRzKQ0KbGlicmFyeShtaXNjZ2lzKQ0KbGlicmFyeShvcGVyYXRvci50b29scykNCmxpYnJhcnkobGVhZmxldC5leHRyYXMpDQpsaWJyYXJ5KHZpcmlkaXNMaXRlKQ0KbGlicmFyeShzZikNCnJvb3QgPC0gcnByb2pyb290Ojppc19yc3R1ZGlvX3Byb2plY3QNCnJvb3RfZmlsZSA8LSByb290JG1ha2VfZml4X2ZpbGUoKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgY29tbWVudD1GQUxTRSkNCg0KYGBgDQoNCmBgYHtyIGNlbnN1cy1hY3MtY29tbXMtY29sb3JzfQ0KZ3JlZW4gPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W1siZ3JlZW4iXV0NCmJsdWUgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W1siYmx1ZSJdXQ0Kb3JhbmdlIDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtbIm9yYW5nZSJdXQ0KcmVkIDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtbInJlZCJdXQ0KdGVhbCA8LSBtaXNjZ2lzOjptaXNjZ2lzX3BhbHMkdGFibGVhdV9jYXRbWyJ0ZWFsIl1dDQpwYWxfcmdiXzQgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W2MoInJlZCIsImdvbGQiLCJncmVlbiIsImJsdWUiKV0gJT4lIHVubGlzdCAlPiUgcGFsZXR0ZSgpDQpwYWxfcmdiXzQgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W2MoInJlZCIsImdvbGQiLCJncmVlbiIsImJsdWUiKV0gJT4lIHVubGlzdCAlPiUgcGFsZXR0ZSgpDQpwYWxfcmdiXzYgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W2MoInJlZCIsImdvbGQiLCJncmVlbiIsImJsdWUiLCJvcmFuZ2UiLCJwdXJwbGUiKV0gJT4lIHVubGlzdCAlPiUgcGFsZXR0ZSgpDQpwYWxfcmdiXzYgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W2MoInJlZCIsImdvbGQiLCJncmVlbiIsImJsdWUiLCJvcmFuZ2UiLCJwdXJwbGUiKV0gJT4lIHVubGlzdCAlPiUgcGFsZXR0ZSgpDQpwcm9qX2xpZ2h0X2dyZXkgPC0gY29sMmhleCgiZ3JleTc1IikNCnByb2pfZ3JleSA8LSBjb2wyaGV4KCJncmV5NTAiKQ0KcHJval9kYXJrX2dyZXkgPC0gY29sMmhleCgiZ3JleTI1IikNCg0KYGBgDQoNCg0KIyMjIENPTyBDb21tdW5pdGllcyB7LX0NCg0KVGhlIHByaW1hcnkgZ2VvZ3JhcGhpYyB1bml0IG9mIHRoaXMgYXNzZXNzbWVudCBpcyB0aGUgW2NlbnN1cyB0cmFjdF0oaHR0cHM6Ly93d3cuY2Vuc3VzLmdvdi9nZW8vcmVmZXJlbmNlL2d0Yy9ndGNfY3QuaHRtbCkuIEFzIGlzIHRoZSBjYXNlIHdpdGggbWFueSBjb21tdW5pdGllcywgdGhlIGNlbnN1cyBnZW9ncmFwaGllcyBkbyBub3QgY29pbmNpZGUgZXhhY3RseSB3aXRoIHRoZSBmb3JtYWwgZ2VvZ3JhcGhpYyBib3VuZGFyeSBvZiB0aGUgc3R1ZHkncyB0aHJlZSBzaXRlcywgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIF9zcGF0aWFsIGFwcHJveGltYXRpb25zXyBvZiB0aGVzZSBjb21tdW5pdGllcy4NCg0KTGlzdGVkIGJlbG93IGFyZSB0aGUgZ2VvZ3JhcGhpYyBpZGVudGlmaWVycyBvZiB0aGUgY2Vuc3VzIHRyYWN0cyB0aGF0IGFwcHJveGltYXRlIGVhY2ggc2l0ZS4NCg0KYGBge3IgY2Vuc3VzLWFjcy1jb21tcy1maWxlcywgcmVzdWx0cz0iYXNpcyJ9DQoNCiMgQ2Vuc3VzIHRyYWN0IGJvdW5kYXJpZXMgZm9yIHRoZSAyMDE1IGRhdGENCg0KIyBSYWluaWVyIFZhbGxleQ0KcnYgPC0gYygiNTMwMzMwMTAwMDEiLCAiNTMwMzMwMTAzMDAiLCAiNTMwMzMwMTA0MDEiLCAiNTMwMzMwMTEwMDEiLCAiNTMwMzMwMTEwMDIiLCAiNTMwMzMwMTExMDEiLCI1MzAzMzAxMTEwMiIsICI1MzAzMzAxMTcwMCIsICI1MzAzMzAxMTgwMCIsICI1MzAzMzAxMTkwMCIpDQoNCiMgV2hpdGUgQ2VudGVyDQp3YyA8LSBjKCI1MzAzMzAyNjYwMCIsIjUzMDMzMDI2NzAwIiwiNTMwMzMwMjY1MDAiLCI1MzAzMzAyNjgwMSIsIjUzMDMzMDI2ODAyIiwiNTMwMzMwMjcwMDAiKQ0KDQojIFNlYVRhYy9UdWt3aWxhDQoNCnN0Y19odXMgPC0gcmVhZF9jc3Yocm9vdF9maWxlKCcxLWRhdGEvMy1leHRlcm5hbC9tYW51YWwvc2VhdGFjLXRyL0RFQ18xMF9TRjFfSDEvREVDXzEwX1NGMV9IMV93aXRoX2Fubi5jc3YnKSwgDQogICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoSWQyID0gY29sX2NoYXJhY3RlcigpKSwgc2tpcCA9IDEpDQoNCnR1a19odXMgPC0gcmVhZF9jc3Yocm9vdF9maWxlKCcxLWRhdGEvMy1leHRlcm5hbC9tYW51YWwvdHVrd2lsYS10ci9ERUNfMTBfU0YxX0gxL0RFQ18xMF9TRjFfSDFfd2l0aF9hbm4uY3N2JyksIA0KICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKElkMiA9IGNvbF9jaGFyYWN0ZXIoKSksIA0KICAgICAgICAgICAgICAgICAgICBza2lwID0gMSkNCg0Kc3RjIDwtICBwYXN0ZShzdWJzdHIoeCA9IHN0Y19odXMkSWQyLDEsMiksc3Vic3RyKHggPSBzdGNfaHVzJElkMiw4LDE2KSxzZXAgPSAiIikNCg0KdHVrIDwtICBwYXN0ZShzdWJzdHIoeCA9IHR1a19odXMkSWQyLDEsMiksc3Vic3RyKHggPSB0dWtfaHVzJElkMiw4LDE2KSxzZXAgPSAiIikNCg0Kc3RjdHVrIDwtIGMoc3RjLHR1aykNCg0KIyBDZW5zdXMgdHJhY3QgYm91bmRhcmllcyBmb3IgdGhlIDIwMDkgZGF0YQ0KDQppZighZXhpc3RzKCdjdycpKXtjdyA8LSByZWFkX3Jkcyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0vY3ctMjAwMC0yMDEwLnJkcycpKX0NCg0KZ2V0X0dFT0lEMjAwOSA8LSBmdW5jdGlvbihnZW9pZHNfMjAxNSwgY3cpew0KICAgICAgICAjIGJyb3dzZXIoKQ0KICAgICAgICBjdyAlPiUgDQogICAgICAgICAgICAgICAgZmlsdGVyKEdFT0lEXzIwMTAgJWluJSBnZW9pZHNfMjAxNSkgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihXRUlHSFQgPiAuMDEpICU+JQ0KICAgICAgICAgICAgICAgIGV4dHJhY3QyKCdHRU9JRF8yMDAwJykgJT4lIHVuaXF1ZSgpDQp9DQoNCmlmKCFmaWxlLmV4aXN0cyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0vY29vLWNvbW0tdHItZGYucmRzJykpKXsNCiAgICAgICAgbGlzdCgNCiAgICAgICAgICAgICAgICAnUlZfMjAwOScgPSBnZXRfR0VPSUQyMDA5KHJ2LGN3KSwNCiAgICAgICAgICAgICAgICAnUlZfMjAxNScgPSBydiwNCiAgICAgICAgICAgICAgICAnV0NfMjAwOScgPSBnZXRfR0VPSUQyMDA5KHdjLGN3KSwNCiAgICAgICAgICAgICAgICAnV0NfMjAxNScgPSB3YywNCiAgICAgICAgICAgICAgICAnU1RLV18yMDA5JyA9IGdldF9HRU9JRDIwMDkoc3RjdHVrLGN3KSwNCiAgICAgICAgICAgICAgICAnU1RLV18yMDE1JyA9IHN0Y3R1aw0KICAgICAgICApICU+JSANCiAgICAgICAgICAgICAgICBtaXNjZ2lzOjpjYmluZF9maWxsKC4pICU+JQ0KICAgICAgICAgICAgICAgIGFzX3RpYmJsZSgpICU+JQ0KICAgICAgICAgICAgICAgIHNldF9jb2xuYW1lcygNCiAgICAgICAgICAgICAgICAgICAgICAgIGMoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYWluaWVyIFZhbGxleTxicj4oMjAwOSkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFpbmllciBWYWxsZXk8YnI+KDIwMTUpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldoaXRlIENlbnRlcjxicj4oMjAwOSkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2hpdGUgQ2VudGVyPGJyPigyMDE1KSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWFUYWMvVHVrd2lsYTxicj4oMjAwOSkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VhVGFjL1R1a3dpbGE8YnI+KDIwMTUpIg0KICAgICAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICkgJT4lIA0KICAgICAgICAgICAgICAgIHdyaXRlX3Jkcyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0vY29vLWNvbW0tdHItZGYucmRzJykpDQp9DQoNCnJlYWRfcmRzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS9jb28tY29tbS10ci1kZi5yZHMnKSkgJT4lIA0KICAgICAgICBrbml0cjo6a2FibGUoY2FwdGlvbiA9ICJDZW5zdXMgVHJhY3QgR0VPSURzIikNCg0KYGBgDQoNClRvIGNyZWF0ZSB0aGUgY29tbXVuaXR5IGFwcHJveGltYXRpb25zLCB0aGUgdHJhY3QgYm91bmRhcmllcyBvZiBlYWNoIGNvbW11bml0eSBhcmUgbWVyZ2VkIGFuZCBlYWNoIG9mIHRoZSBjZW5zdXMgdGFibGUgZXN0aW1hdGVzIGFyZSBhZ2dyZWdhdGVkLiBJbiBhZGRpdGlvbiB0byBjb21iaW5pbmcgdGhlIGVzdGltYXRlcywgdGhpcyBtZXRob2QgYWxzbyByZWNhbGN1bGF0ZXMgdGhlIHN0YW5kYXJkIGVycm9yIGZvciBlYWNoIGNlbnN1cyB0YWJsZS4gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhpcyBtZXRob2QgaXMgb25seSB2YWxpZCBmb3IgY2Vuc3VzIHRhYmxlcyByZXByZXNlbnRpbmcgY291bnQgZGF0YS5eW1RoaXMgbGltaXRhdGlvbiBpcyBtYWRlIGV4cGxpY2l0IGJ5IHRoZSBgYWNzYCBwYWNrYWdlIGNyZWF0b3IsIEV6cmEgSGFiZXIgR2xlbm4sIFtoZXJlXShodHRwOi8vZWdsZW5uLnNjcmlwdHMubWl0LmVkdS9jaXR5c3RhdGUvKS5dDQoNCmBgYHtyIGNlbnN1cy1hY3MtY29tbXMtY29tYmluZWQtZ2VvbXN9DQoNCmlmKCFleGlzdHMoJ2Fjc19ub3JtbF9zZicpKXthY3Nfbm9ybWxfc2YgPC0gcmVhZF9yZHMocm9vdF9maWxlKCcuLzEtZGF0YS80LWludGVyaW0vY29vLWFjcy1ub3JtbC1zZi5yZHMnKSl9DQoNCiMgTmV3IGNvbHVtbnM6IGBDT01NVU5JVFlgIGFuZCBgQ09NTU1VTklUWV9GVUxMYA0KDQpydjYgPC0gbWFwX2NocihydixzdHJfc3ViLDYsMTEpDQoNCndjNiA8LSBtYXBfY2hyKHdjLHN0cl9zdWIsNiwxMSkNCg0Kc3RjdHVrNiA8LSBtYXBfY2hyKHN0Y3R1ayxzdHJfc3ViLDYsMTEpDQoNCmNvbzYgPC0gYyhydjYsd2M2LHN0Y3R1azYpDQoNCiMgQWdncmVnYXRpb24gZnVuY3Rpb24NCmFnZ3JlZ2F0ZV9jb21tcyA8LSBmdW5jdGlvbihjb2wpew0KICAgICAgICANCiAgICAgICAgY2xhc3MgPC0gY29sICU+JSBjbGFzcygpICU+JSB1bmlxdWUgJT4lIGV4dHJhY3QyKDEpDQogICAgICAgIA0KICAgICAgICAjIENIQVJBQ1RFUiBDT0xVTU5TDQogICAgICAgIGlmKGNsYXNzICVpbiUgJ2NoYXJhY3Rlcicpe05BX2NoYXJhY3Rlcl8NCiAgICAgICAgfWVsc2UgDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgIyBMT0dJQ0FMIENPTFVNTlMgDQogICAgICAgICAgICAgICAgaWYoY2xhc3MgJWluJSAnbG9naWNhbCcpeyBOQQ0KICAgICAgICAgICAgICAgIH1lbHNlDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICMgU0ZDIENPTFVNTlMgDQogICAgICAgICAgICAgICAgICAgICAgICBpZihjbGFzcyAlaW4lICdzZmNfTVVMVElQT0xZR09OJyl7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X3VuaW9uICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2Nhc3QoJ01VTFRJUE9MWUdPTicpICU+JSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9idWZmZXIoLjAwMDAwMSkgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2Nhc3QoJ01VTFRJUE9MWUdPTicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBQ1MgQ09MVU1OUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjbGFzcyAlaW4lICdsaXN0JyAmIGV4dHJhY3QyKGNvbCwxKSAlPiUgY2xhc3MgJWluJSAnYWNzJyl7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCAlPiUgcmVkdWNlKHN1cHByZXNzV2FybmluZ3MocmJpbmQuYWNzKSkgJT4lIGFwcGx5KDEsc3VtKSAlPiUgbGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQp9DQoNCmlmKCFmaWxlLmV4aXN0cyhyb290X2ZpbGUoJy4vMS1kYXRhLzQtaW50ZXJpbS9hY3Nfbm9ybWxfYWxsX2dlb21zX3NmLnJkcycpKSl7DQogICAgICAgIA0KICAgICAgICBhY3Nfbm9ybWxfY29tbXNfc2YgPC0gDQogICAgICAgICAgICAgICAgYWNzX25vcm1sX3NmICU+JSANCiAgICAgICAgICAgICAgICBtdXRhdGUoQ09NTVVOSVRZX0ZVTEwgPSBjYXNlX3doZW4oLiRHRU9JRDYgJWluJSBydjYgfiAnUmFpbmllciBWYWxsZXknLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJEdFT0lENiAlaW4lIHdjNiB+ICdXaGl0ZSBDZW50ZXInLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJEdFT0lENiAlaW4lIHN0Y3R1azYgfiAnU2VhVGFjL1R1a3dpbGEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksDQogICAgICAgICAgICAgICAgICAgICAgIENPTU1VTklUWSA9IGNhc2Vfd2hlbiguJEdFT0lENiAlaW4lIHJ2NiB+ICdSVicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJEdFT0lENiAlaW4lIHdjNiB+ICdXQycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJEdFT0lENiAlaW4lIHN0Y3R1azYgfiAnU1RLVycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykpICU+JSANCiAgICAgICAgICAgICAgICBzZWxlY3QoTkFNRSxOQU1FX0ZVTEwsR0VPSUQ2LENPTU1VTklUWV9GVUxMLENPTU1VTklUWSxldmVyeXRoaW5nKCkpICU+JSANCiAgICAgICAgICAgICAgICB1bmdyb3VwICU+JSANCiAgICAgICAgICAgICAgICBzdF9hc19zZigpDQogICAgICAgIA0KICAgICAgICBjb21tcyA8LQ0KICAgICAgICAgICAgICAgIGFjc19ub3JtbF9jb21tc19zZiAlPiUgDQogICAgICAgICAgICAgICAgZmlsdGVyKCFpcy5uYShDT01NVU5JVFkpKSAlPiUgDQogICAgICAgICAgICAgICAgdW5jbGFzcyAlPiUgDQogICAgICAgICAgICAgICAgYXNfdGliYmxlICU+JSANCiAgICAgICAgICAgICAgICBzbGljZV9yb3dzKCdDT01NVU5JVFknKSAlPiUgDQogICAgICAgICAgICAgICAgZG1hcChhZ2dyZWdhdGVfY29tbXMpICU+JSANCiAgICAgICAgICAgICAgICBtdXRhdGUoZ2VvbWV0cnkgPSBzdF9zZmMoZ2VvbWV0cnkpKSAlPiUgDQogICAgICAgICAgICAgICAgc3RfYXNfc2YoKQ0KICAgICAgICANCiAgICAgICAgYWxsX2NvbyA8LSANCiAgICAgICAgICAgICAgICBhY3Nfbm9ybWxfY29tbXNfc2YgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoQ09NTVVOSVRZKSkgJT4lIA0KICAgICAgICAgICAgICAgIHVuY2xhc3MgJT4lIA0KICAgICAgICAgICAgICAgIGFzX3RpYmJsZSAlPiUgDQogICAgICAgICAgICAgICAgZG1hcChhZ2dyZWdhdGVfY29tbXMpICU+JSANCiAgICAgICAgICAgICAgICBtdXRhdGUoZ2VvbWV0cnkgPSBzdF9zZmMoZ2VvbWV0cnkpKSAlPiUgDQogICAgICAgICAgICAgICAgc3RfYXNfc2YoKQ0KICAgICAgICANCiAgICAgICAgYWNzX25vcm1sX2FsbF9nZW9tc19zZiA8LSANCiAgICAgICAgICAgICAgICBsaXN0KGFjc19ub3JtbF9jb21tc19zZiwgY29tbXMsIGFsbF9jb28pICU+JSANCiAgICAgICAgICAgICAgICByZWR1Y2UocmJpbmQuc2YpICU+JSANCiAgICAgICAgICAgICAgICBtdXRhdGUoR0VPR1JBUEhZID0gY2FzZV93aGVuKGlzLm5hKC4kTkFNRSkgJiAhaXMubmEoLiRDT01NVU5JVFkpIH4gJ2NvbW11bml0eScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcy5uYSguJE5BTUUpICYgaXMubmEoLiRDT01NVU5JVFkpIH4gJ2NvbW11bml0aWVzIChtdWx0aXBsZSknLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiROQU1FICVpbiUgJ1NFQUNDRCcgfiAnY291bnR5IHN1YmRpdmlzaW9uJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4kTkFNRSAlaW4lICdLQycgfiAnY291bnR5JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAndHJhY3QnKSkgJT4lIA0KICAgICAgICAgICAgICAgIG11dGF0ZShOQU1FID0gY2FzZV93aGVuKA0KICAgICAgICAgICAgICAgICAgICAgICAgaXMubmEoLiROQU1FKSAmIC4kR0VPR1JBUEhZICVpbiUgJ2NvbW11bml0aWVzIChtdWx0aXBsZSknIH4gJ0NPTycsDQogICAgICAgICAgICAgICAgICAgICAgICBpcy5uYSguJE5BTUUpICYgLiRDT01NVU5JVFkgJWluJSAnUlYnIH4gLiRDT01NVU5JVFksDQogICAgICAgICAgICAgICAgICAgICAgICBpcy5uYSguJE5BTUUpICYgLiRDT01NVU5JVFkgJWluJSAnV0MnIH4gLiRDT01NVU5JVFksDQogICAgICAgICAgICAgICAgICAgICAgICBpcy5uYSguJE5BTUUpICYgLiRDT01NVU5JVFkgJWluJSAnU1RLVycgfiAuJENPTU1VTklUWSwNCiAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAuJE5BTUUpKSAlPiUgDQogICAgICAgICAgICAgICAgbXV0YXRlKE5BTUVfRlVMTCA9IGNhc2Vfd2hlbigNCiAgICAgICAgICAgICAgICAgICAgICAgIC4kTkFNRSAlaW4lICdDT08nIH4gJ0NvbW11bml0aWVzIG9mIE9wcG9ydHVuaXR5JywNCiAgICAgICAgICAgICAgICAgICAgICAgIC4kTkFNRSAlaW4lICdSVicgfiAnUmFpbmllciBWYWxsZXknLA0KICAgICAgICAgICAgICAgICAgICAgICAgLiROQU1FICVpbiUgJ1dDJyB+ICdXaGl0ZSBDZW50ZXInLA0KICAgICAgICAgICAgICAgICAgICAgICAgLiROQU1FICVpbiUgJ1NUS1cnIH4gJ1NlYVRhYy9UdWt3aWxhJywNCiAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAuJE5BTUVfRlVMTCkpICU+JSANCiAgICAgICAgICAgICAgICBtdXRhdGUoR0VPR19GQ1QgPSBmYWN0b3IoR0VPR1JBUEhZLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCd0cmFjdCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW11bml0eScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW11bml0aWVzIChtdWx0aXBsZSknLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3VudHkgc3ViZGl2aXNpb24nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3VudHknKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJlZCA9IFRSVUUpKSAlPiUgDQogICAgICAgICAgICAgICAgbXV0YXRlKFNFQUNDRF9MR0wgPSBpZl9lbHNlKE5BTUUgJWluJSBjKCdTRUFDQ0QnLCdDT08nLCdSVicsJ1dDJywnU1RLVycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUFDQ0RfTEdMKSkgJT4lIA0KICAgICAgICAgICAgICAgIHNlbGVjdChOQU1FOlNFQUNDRF9MR0wsR0VPR1JBUEhZLEdFT0dfRkNULGdlb21ldHJ5LG1hdGNoZXMoJzIwMTUnKSxtYXRjaGVzKCcyMDA5JykpIA0KICAgICAgICANCiAgICAgICAgYWNzX25vcm1sX2FsbF9nZW9tc19zZiAlPiUgDQogICAgICAgICAgICAgICAgd3JpdGVfcmRzKHJvb3RfZmlsZSgnLi8xLWRhdGEvNC1pbnRlcmltL2Fjc19ub3JtbF9hbGxfZ2VvbXNfc2YucmRzJykpDQogICAgICAgIA0KfQ0KICAgICAgICANCmFjc19ub3JtbF9hbGxfZ2VvbXNfc2YgPC0gcmVhZF9yZHMocm9vdF9maWxlKCcuLzEtZGF0YS80LWludGVyaW0vYWNzX25vcm1sX2FsbF9nZW9tc19zZi5yZHMnKSkNCg0KDQphY3Nfbm9ybWxfYWxsX2dlb21zX3NmICU+JSANCiAgICAgICAgYXJyYW5nZShmY3RfcmV2KEdFT0dfRkNUKSkgJT4lIA0KICAgICAgICBzZWxlY3QoTkFNRTpHRU9HX0ZDVCxnZW9tZXRyeSxtYXRjaGVzKCcyMDE1JyksbWF0Y2hlcygnMjAwOScpKSAlPiUgDQogICAgICAgIHVuY2xhc3MgJT4lIA0KICAgICAgICBhc190aWJibGUoKQ0KDQpgYGANCg0KYGBge3IgY2Vuc3VzLW5vdC1hY3MtYWxsLWdlb21zfQ0KIyBUaGlzIHNhdmVzIGEgdmVyc2lvbiBvZiB0aGUgYWNzIGRhdGEgdGhhdCBkb2VzIG5vdCB1c2UgYGFjc2AgZm9ybWF0DQojIFRoaXMgd2lsbCBiZSB1c2VmdWwgZm9yIHN1bW1hcnkgdGFibGVzIGFuZCB2aXN1YWxpemF0aW9ucy4NCg0KaWYoIWZpbGUuZXhpc3RzKHJvb3RfZmlsZSgnLi8xLWRhdGEvNS10aWR5L2Nvby1jZW5zdXMtbm90LWFjcy1hbGwtc2YucmRzJykpKXsNCiAgICAgICAgYWNzX25vcm1sX2FsbF9nZW9tc19zZiAlPiUgDQogICAgICAgICAgICAgICAgdW5jbGFzcyAlPiUgDQogICAgICAgICAgICAgICAgYXNfdGliYmxlKCkgJT4lIA0KICAgICAgICAgICAgICAgIGdhdGhlcihUQkwsQUNTLG1hdGNoZXMoJzIwMTV8MjAwOScpKSAlPiUgDQogICAgICAgICAgICAgICAgbXV0YXRlKEVTVCA9IG1hcF9kYmwoQUNTLGVzdGltYXRlKSAlPiUgcm91bmRfYW55KDEpICU+JSBhcy5pbnRlZ2VyKCkpICU+JSANCiAgICAgICAgICAgICAgICBtdXRhdGUoVFlQRSA9ICdFU1QnKSAlPiUgDQogICAgICAgICAgICAgICAgdW5pdGUoVEJMX0VTVCxUQkwsVFlQRSxzZXAgPSAnXycpICU+JSANCiAgICAgICAgICAgICAgICBzcHJlYWQoVEJMX0VTVCxFU1QpICU+JSANCiAgICAgICAgICAgICAgICBzZWxlY3QoLUFDUykgJT4lIA0KICAgICAgICAgICAgICAgIHN0X2FzX3NmKCkgJT4lIA0KICAgICAgICAgICAgICAgIHdyaXRlX3Jkcyhyb290X2ZpbGUoJy4vMS1kYXRhLzUtdGlkeS9jb28tY2Vuc3VzLW5vdC1hY3MtYWxsLXNmLnJkcycpKQ0KfQ0KYGBgDQoNCg0KDQojIyMjIENvbW11bml0eSBNYXBzDQpgYGB7ciBjZW5zdXMtYWNzLWNvbW1zLW1hcCwgZmlnLmhlaWdodD0xLjI1LCBmaWcud2lkdGg9MSwgIGZpZy5zaG93PSdob2xkJywgZHBpPTE1MH0NCg0KIyBQcmludCBDb21tdW5pdHkgTWFwcw0KDQpzaG93X2NvbW1fbWFwIDwtIGZ1bmN0aW9uKG5tLCBjb2xvciwgZmxvYXRfZGlyKXsNCiAgICAgICAgDQogICAgICAgICMgTWFwIENlbnRlcg0KICAgICAgICANCiAgICAgICAgc3RfY2VudHJvaWRfcXQgPC0gcXVpZXRseShzdF9jZW50cm9pZCkNCiAgICAgICAgDQogICAgICAgIGNudHIgPC0gYWNzX25vcm1sX2FsbF9nZW9tc19zZiAlPiUgDQogICAgICAgICAgICAgICAgZmlsdGVyKEdFT0dSQVBIWSAlaW4lICdjb21tdW5pdGllcyAobXVsdGlwbGUpJykgJT4lIA0KICAgICAgICAgICAgICAgIHN0X2Jib3goKQ0KICAgICAgICBoYWxmd2F5IDwtIGZ1bmN0aW9uKG1heCxtaW4peyhtYXgtbWluKS8yICsgbWlufQ0KICAgICAgICANCiAgICAgICAgbG5nIDwtIGNudHJbWyd4bWluJ11dDQogICAgICAgIGxhdCA8LSBoYWxmd2F5KGNudHJbWyd5bWF4J11dLGNudHJbWyd5bWluJ11dKQ0KICAgICAgICANCiAgICAgICAgY29tbV9zcCA8LSANCiAgICAgICAgICAgICAgICBhY3Nfbm9ybWxfYWxsX2dlb21zX3NmICU+JSANCiAgICAgICAgICAgICAgICBzZWxlY3QoZXZlcnl0aGluZygpLC1tYXRjaGVzKCcyMDE1fDIwMDknKSkgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihHRU9HUkFQSFkgJWluJSAndHJhY3QnICYgQ09NTVVOSVRZICVpbiUgbm0pICU+JSANCiAgICAgICAgICAgICAgICBhcygiU3BhdGlhbCIpDQogICAgICAgIA0KICAgICAgICBjb21tX2NudF9zcCA8LSANCiAgICAgICAgICAgICAgICBhY3Nfbm9ybWxfYWxsX2dlb21zX3NmICU+JSANCiAgICAgICAgICAgICAgICBzZWxlY3QoZXZlcnl0aGluZygpLC1tYXRjaGVzKCcyMDE1fDIwMDknKSkgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihHRU9HUkFQSFkgJWluJSAnY29tbXVuaXR5JyAmIENPTU1VTklUWSAlaW4lIG5tKSAgJT4lIA0KICAgICAgICAgICAgICAgIG11dGF0ZShnZW9tZXRyeSA9IHN0X2NlbnRyb2lkKGdlb21ldHJ5KSkgJT4lDQogICAgICAgICAgICAgICAgYXMoIlNwYXRpYWwiKQ0KICAgICAgICANCiAgICAgICAgY29tbV9ib3VuZHNfc3AgPC0gDQogICAgICAgICAgICAgICAgYWNzX25vcm1sX2FsbF9nZW9tc19zZiAlPiUgDQogICAgICAgICAgICAgICAgc2VsZWN0KGV2ZXJ5dGhpbmcoKSwtbWF0Y2hlcygnMjAxNXwyMDA5JykpICU+JSANCiAgICAgICAgICAgICAgICBmaWx0ZXIoR0VPR1JBUEhZICVpbiUgJ2NvbW11bml0eScgJiBDT01NVU5JVFkgJWluJSBubSkgICU+JQ0KICAgICAgICAgICAgICAgIGFzKCJTcGF0aWFsIikgJT4lIA0KICAgICAgICAgICAgICAgIGFzKCJTcGF0aWFsTGluZXMiKQ0KICAgICAgICANCiAgICAgICAgY29tbV9zcCAlPiUgDQogICAgICAgICAgICAgICAgbWlzY2dpczo6bXlMZmx0R3JleSgpICU+JQ0KICAgICAgICAgICAgICAgIG15TGZsdE9wdHModGlsZUxhYmVscyA9IEZBTFNFLCBmdWxsU2NyZWVuQnRuID0gRkFMU0UsIGJ1bXBUaWxlTGFiZWxzID0gRkFMU0UpICU+JSANCiAgICAgICAgICAgICAgICBhZGRQb2x5Z29ucyhzbW9vdGhGYWN0b3IgPSAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gY29sMmhleCgid2hpdGUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSAuNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3IgPSBjb2xvciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsT3BhY2l0eSA9IC42NQ0KICAgICAgICAgICAgICAgICkgJT4lIA0KICAgICAgICAgICAgICAgIGFkZFBvbHlsaW5lcyhkYXRhID0gY29tbV9ib3VuZHNfc3AsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxPcGFjaXR5ID0gMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBwcm9qX2RhcmtfZ3JleSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eSA9IDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aEZhY3RvciA9IDApICU+JQ0KICAgICAgICAgICAgICAgIGFkZEF3ZXNvbWVNYXJrZXJzKGRhdGEgPSBjb21tX2NudF9zcCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gbWFya2VyT3B0aW9ucyhvcGFjaXR5ID0gMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSB+IE5BTUVfRlVMTCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKG5vSGlkZSA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGMoMCwwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gJ2F1dG8nLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9ubHkgPSBUUlVFKSkgJT4lIA0KICAgICAgICAgICAgICAgIHNldFZpZXcobG5nLGxhdCx6b29tID0gOSkgJT4lIA0KICAgICAgICAgICAgICAgIG1pc2NnaXM6OnN0eWxlV2lkZ2V0KHN0eWxlID0gcGFzdGUwKCJmbG9hdDoiLGZsb2F0X2RpciwiO21hcmdpbjoxcHg7IiwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RleHQtc2hhZG93Oi0xcHggMCAjRkZGRkZGLDAgMXB4ICNGRkZGRkYsMXB4IDAgI0ZGRkZGRiwwIC0xcHggI0ZGRkZGRiIpKSAlPiUgDQogICAgICAgICAgICAgICAgcHJpbnQoKQ0KfQ0KDQpuYW1lcyA8LSBjKCdSVicsJ1dDJywnU1RLVycpDQoNCmNvbG9ycyA8LSBjKGJsdWUsIGdyZWVuLCByZWQpDQoNCmZsb2F0X2RpcnMgPC0gYygnbGVmdCcsJ2xlZnQnLCdub25lJykNCg0KcHdhbGsobGlzdChuYW1lcywgY29sb3JzLCBmbG9hdF9kaXJzKSxzaG93X2NvbW1fbWFwKQ0KDQoNCmBgYA0K